package com.alibaba.citrus.ots.platform.enhance.functions.diff.common.template;

import com.alibaba.citrus.ots.common.annotation.ProcessInvoker;
import com.alibaba.citrus.ots.platform.enhance.repository.model.diff.common.FieldLineDTO;
import com.alibaba.cz.base.tool.log.Log;
import com.alibaba.lattice2.epoch.sdk.model.Result;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * @author: qiaojiange
 * @create: 2022/01/19
 * @Description 一对一对账模板，此模板是精确到字段维度
 */
@Component
public class OneDiffOneTemplate implements DiffTemplate {

    private Log log = Log.getLogger(OneDiffOneTemplate.class);

    /**
     * 对账
     *
     * @param baseLineFieldLineDTO 基准数据
     * @param fieldLineDTO         字段值
     * @return 返回结果
     */
    @Override
    @ProcessInvoker
    public Result<String> diff(FieldLineDTO baseLineFieldLineDTO, FieldLineDTO fieldLineDTO) {
        if (Objects.isNull(baseLineFieldLineDTO)) {
            return Result.fail("", "基准字段数据不能为空！");
        }

        if (Objects.isNull(fieldLineDTO)) {
            return Result.fail("", "被对比字段不能为空！");
        }

        //1. 基准数据和对比数据同时为 null
        if (Objects.isNull(baseLineFieldLineDTO.getFieldValue())
                && Objects.isNull(fieldLineDTO.getFieldValue())) {
            return Result.success("该字段对账成功!");
        }

        //2. 基准数据为 null ，对比数据不为null
        if (Objects.isNull(baseLineFieldLineDTO.getFieldValue())
                && Objects.nonNull(fieldLineDTO.getFieldValue())) {
            return Result.fail("", "基准数据为空 ，对比数据不为空!");
        }

        //3. 基准数据不为 null, 和对比数据进行对比
        if (baseLineFieldLineDTO.getFieldValue().equals(fieldLineDTO.getFieldValue())) {
            return Result.success("该字段对账成功!");
        }

        return Result.fail("", fieldLineDTO.getOriginFieldName()+"字段不一致!");
    }
}
